//线程锁的学习
#include<iostream>
#include<string>
#include<ctime>
#include<unistd.h>
#include<pthread.h>
#include<stdio.h>
#include"Lock.hpp"
#include"thread.hpp"


//加锁后必须解锁，不然会阻塞在锁那


int tickets=8888;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; //用于静态初始化


// class BTckets
// {
//     public:
//     BTckets(const string name,pthread_mutex_t *pmutex)
//     :_name(name),_pmutex(pmutex)
//     {
//     }
//     ~BTckets(){}
//     private:
//     string _name;
//     pthread_mutex_t *_pmutex;
// };



void print_status(Thread t1,Thread t2,Thread t3)
{

    cout<<"id:"<<t1.threadid()<<"--"<<"name"<<t1.threadname()<<"--"<<"status:"<<t1.status()<<endl;
    cout<<"id:"<<t2.threadid()<<"--"<<"name"<<t2.threadname()<<"--"<<"status:"<<t2.status()<<endl;
    cout<<"id:"<<t3.threadid()<<"--"<<"name"<<t3.threadname()<<"--"<<"status:"<<t3.status()<<endl;

}




// void * buy_ticket(void* args)
// {
//     //  Thread td =static_cast<Thread*>(args);
//     string message=static_cast<char*>(args);
  
//     while(tickets)
//     {
//         Lockguard lock(&mutex); //自动锁
//         if(tickets>0)
//         {
//             usleep(1000); //微秒级别的停留时间 这里是1毫秒
//             cout<<message<<"get a ticket:"<<tickets--<<endl;
//         }
//         else 
//         {
//             break;
//         }

//         usleep(1000);
//     }

//     return nullptr;
// }


 void *threadRoutine(void* argv)
 {
    string messages =static_cast<const char *>(argv);

    int n=10;

    while(n--)
    {
        cout<<messages<<" : "<<n<<endl;
        sleep(1);
    }



 }


int main()
{
    Thread t1(1,threadRoutine,(void *)"thread[1]");
    // Thread t2(2,buy_ticket,"thread[2]");
    // Thread t3(3,buy_ticket,"thread[3]");



    // Thread t1(1, threadRoutine, (char *)"hellobit2");
    // Thread t2(2, threadRoutine, (void *)"hellobit2");
    // Thread t3(3, threadRoutine, (void *)"hellobit3");
    // Thread t4(4, threadRoutine, (void *)"hellobit4");


 
    // print_status(t1, t2, t3);


    t1.Runing();
    // t2.Runing();
    // t3.Runing();


    // print_status( t1, t2, t3);


    t1.join();
    // t2.join();
    // t3.join();


    // print_status( t1, t2, t3);







    //测试买票
    // pthread_mutex_t mutex;
    // pthread_mutex_init(&mutex,nullptr) //初始化锁
    // pthread_t t[10];
    // int size=sizeof(t)/sizeof(t[0]);

    // for(int i=0;i<size;i++)
    // {
    //     // char *arr=new char[32];
    //     char name[128];
    //     Thread * td=new Thread(name,&mutex);
    //     // snprintf(arr,128,"thread[%d]",i+1);

    //     pthread_create(t+i,nullptr,buy_ticket,&td);
    // }

    // for(int i=0;i<size;i++)
    // {
    //     pthread_join(t[i],nullptr); //线程回收
    // }
    
    // pthread_mutex_destroy(&mutex);


    return 0;
}